//
// Created by Luhang on 2023/5/7/007.
//

#ifndef INC_0310_STACK_H
#define INC_0310_STACK_H

#endif //INC_0310_STACK_H

#include <iostream>
#include <vector>
#include <list>

using std::cout;
using std::endl;

namespace Lu{
    template<class T, class Container = std::vector<T>>
    class stack{
    public:
        void push(const T& val){
            _con.push_back(val);
        }

        void pop(){
            _con.pop_back();
        }

        const T& top(){
            return _con.back();
        }

        size_t size(){
            return _con.size();
        }

        bool empty(){
            return _con.empty();
        }

    private:
        Container _con;
    };

    void Test1(){
        //stack<int, std::list<int>> st;
        //stack<int, std::vector<int>> st;
        stack<int> st;

        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);
        while (!st.empty()){
            cout << st.top() << " ";
            st.pop();
        }
        cout << endl;
    }
}